/*
 * $Id: UpdateMarketPrices.java 26 2013-05-20 06:00:59Z antonyhands@gmail.com $
 */
package ru.olympus.antonyhands.ao.ui;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;

import ru.olympus.antonyhands.ao.UIHelper;
import ru.olympus.antonyhands.ao.data.AOData;
import ru.olympus.antonyhands.ao.data.entities.AOItem;
import ru.olympus.antonyhands.ao.data.util.ByTitleComparator;
import ru.olympus.antonyhands.ao.ui.listener.CancelButtonClickListener;
import ru.olympus.antonyhands.ao.util.StringUtilities;

import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

/**
 * Компонент массового обновления рыночных цен на предметы
 * 
 * @author AntonyHands
 * @since 17.05.2013
 */
public class UpdateMarketPrices extends CustomComponent
{
    private static final long serialVersionUID = -3457490133527168310L;

    private Component _nextComponent;
    private List<AOItem> _items;

    private VerticalLayout mainLayout;

    private HashMap<AOItem, TextField> fieldsMap = new HashMap<AOItem, TextField>();

    /**
     * Массовое обновление ВСЕХ рыночных цен
     */
    public UpdateMarketPrices()
    {
        this(null, null);
    }

    /**
     * Массовое обновление рыночных цен указанных предметов
     * 
     * @param nextComponent - следующий компонент, в который переходим после обновления цен
     * @param items - предметы, рыночные цены которых надо обновить
     */
    public UpdateMarketPrices(Component nextComponent, List<AOItem> items)
    {
        _nextComponent = nextComponent;
        _items = items;
        buildMainLayout();
        setCompositionRoot(mainLayout);
    }

    private Component buildMainLayout()
    {
        if (_items == null || _items.isEmpty())
        {
            _items = AOData.getInstance().listItems();
            Collections.sort(_items, new ByTitleComparator());
        }

        mainLayout = new VerticalLayout();

        mainLayout.addComponent(new Label("Уточните рыночные цены предметов:"));

        for (AOItem item : _items)
        {
            TextField field = new TextField(item.getTitle());
            field.setValue(StringUtilities.longToString(item.getMarketPrice()));
            fieldsMap.put(item, field);
            mainLayout.addComponent(field);
        }

        HorizontalLayout buttonsLayout = new HorizontalLayout();
        mainLayout.addComponent(buttonsLayout);

        Button okButton = new Button("Сохранить");
        okButton.addListener(new ClickListener()
        {
            private static final long serialVersionUID = -1669819872382792148L;

            @Override
            public void buttonClick(ClickEvent event)
            {
                for (Entry<AOItem, TextField> entry : fieldsMap.entrySet())
                {
                    entry.getKey().setMarketPrice(StringUtilities.stringToLong((String)entry.getValue().getValue()));
                }
                UIHelper.changeCurrentComponent(_nextComponent);
            }
        });
        buttonsLayout.addComponent(okButton);

        Button cancelButton = new Button("Отмена");
        cancelButton.addListener(new CancelButtonClickListener());
        buttonsLayout.addComponent(cancelButton);

        return mainLayout;
    }
}
